var uploader =null ,$image =null,_file=null,_windIndex=-100;
$(function () {

    var $fileSingleSizeLimit = 2;//默认最大可传2M的文件
    var $fileSizeLimit = 10;//总大小 10M
    if(params.fileType!='img'){
        $fileSingleSizeLimit = 20;//如果不是图片(根据后台限制可调节大小)
    }
    if(params.fileType == 'apk'){
        $fileSingleSizeLimit = 100;//如果是apk(根据后台限制可调节大小)
        $fileSizeLimit = 100;//总大小 10M
    }
    var acceptObj={
        'img':{
            title: 'img',
            extensions: 'jpg,jpeg,png',
            mimeTypes: 'image/jpeg,image/png'
        },
        'ico':{
            title: 'ico',
            title: 'ico',
            extensions: 'ico',
            mimeTypes: 'image/x-icon'
        },
        'xls':{
            title: 'xls',
            extensions: 'xls',
            mimeTypes: 'application/vnd.ms-excel'
        },
        'xlsx':{
            title: 'xlsx',
            extensions: 'xlsx',
            mimeTypes: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
        },
        'docx':{
            title: 'docx',
            extensions: 'docx',
            mimeTypes: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'},
        'pdf':{
            title: 'pdf',
            extensions: 'pdf',
            mimeTypes: 'application/pdf'
        },
        'zip':{
            title: 'zip',
            extensions: 'zip,rar',
            mimeTypes: 'application/zip'
        },
        'apk':{
            title: 'apk',
            extensions: 'apk',
            mimeTypes: 'application/apk'
        }
    };
    uploader = WebUploader.create({
        // swf文件路径
        swf: staticPath + '/common/webuploader/Uploader.swf',
        // 文件接收服务端。
        server: typeof params.url != 'undefined'? params.url : baseloaction + '/admin/uploadFile',
        //限制选择的文件类型
        accept:acceptObj[params.fileType],
        //指定选择文件的按钮容器，不指定则不创建按钮
        pick: {
            //指定选择文件的按钮容器，不指定则不创建按钮。注意 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点
            id: '#'+btnId,
            //指定按钮文字。不指定时优先从指定的容器中看是否自带文字
            innerHTML: params.fileType=='img'?'点击选择图片':'点击选择文件',
            //是否开起同时选择多个文件能力
            multiple: params.cut != true? true:false
        },
        //文件上传请求的参数表，每次发送都会发送此对象中的参数
        /*formData:{
            'imgSize':params.paramDirName
        },*/
        // 不压缩image, 默认如果是jpeg，文件上传前会压缩一把再上传！
        resize: false,
        //限制最多个可选择一个文件
        fileNumLimit: typeof params.fileNumLimit !='undefined' ? params.fileNumLimit :  1,
        //对图片不进行压缩
        compress:false,
        //文件总大小
        fileSizeLimit:1024*1024* $fileSizeLimit,
        //单个文件大小是否超出限制, 超出则不允许加入队
        fileSingleSizeLimit: $fileSingleSizeLimit * 1024 *1024,
    });
    //选择文件后的监听器
    uploader.on('fileQueued',function (file) {
        // 创建缩略图
        // 如果为非图片文件，可以不用调用此方法。
        // thumbnailWidth x thumbnailHeight 为 100 x 100
        uploader.makeThumb( file, function( error, src ) {
            $("#preview-box").removeClass('hide');
            $("#uploader").addClass("hide");
            if ( error ) {//非图片文件
                $("#previewImg").addClass("hide");//因为不是图片，隐藏图片预览区
                $("#previewFile").removeClass("hide").append("<div>[该文件不能预览]"+file.name+"</div>");
                $("#resetSelect").removeClass("hide").find(".resetImg").text("重新选择文件");//显示重新选择文档按钮
            }else{//图片文件
                $("#previewFile,#resetSelect").addClass("hide");//因为是图片，隐藏文件名显示区

                if(typeof params.cut !='undefined' && params.cut==true){//需要剪切
                    $("#previewImg").removeClass("hide").append("<img style='margin-left: 5px;' src='"+src+"'/>");//("src",src);////因为是图片，显示图片预览区
                    $("#cut-handle-box").removeClass("hide");//显示剪切工具操作区
                    _file = file;
                    imageCropper();//初始化剪切框
                }else{
                    $("#previewImg").removeClass("hide").append("<img style='margin-left: 5px;' width='130px' height='130px' src='"+src+"'/>");//("src",src);////因为是图片，显示图片预览区
                    $("#resetSelect").removeClass("hide").find(".resetImg").text("重新选择图片");//显示重新选择文档按钮
                }
            }
            $(".resetImg").click(function () {//重新选择图片
                uploader.reset();
                $("#cut-handle-box,#preview-box,#resetSelect").addClass("hide");
                $("#previewFile,.resetImg").text("");
                $("#previewImg").html("");
                $("#uploader").removeClass("hide");
            });
        }, 1, 1 );//设置显示1比1
    });
    //上传进度监听器
    uploader.on('uploadProgress',function (file,progress) {
    });
    //某个文件上传成功服务器的回调
    uploader.on("uploadAccept",function (object,ret) {
        if(ret.success==true){//服务器响应成功
            var iframeName = contentMainIframeName();
            //调取父页面
            parent.frames[iframeName][params['callback']](ret.entity);
        }else{//服务器响应失败
            if(typeof params.alertType =='undefined' || params.alertType==1){
                icModale(0,ret.message);
            }else if(params.alertType==2){
                icModale(1,ret.message,2,function (index) {
                    parent.layer.close(index);
                    parent.layer.close(_windIndex);
                });
            }
        }
    });
    //文件上传成功监听器
    uploader.on('uploadSuccess',function (file) {
    });
    //文件不管上传是否成功，都会调用的监听器
    uploader.on('uploadComplete',function (file) {
    });
    //全部上传完成
    uploader.on('uploadFinished',function () {
        if(params.alertType != 2){
            parent.layer.close(_windIndex);
        }
    });
    //文件上传错误监听器
    uploader.on('uploadError',function (file) {
        uploadStatus = true;
        icModale(0,'文件上传失败');
    });
    //上传插件错误监听
    uploader.on('error',function (code) {
        if(code=='F_DUPLICATE'){
            icModale(0,'选择的文件已存在队列中');
        }else if(code=='Q_EXCEED_NUM_LIMIT'){
            icModale(0,'一次最多可上传'+(typeof params.fileNumLimit != 'undefined'? params.fileNumLimit : 1)+'个文件');
        }else if(code=='Q_EXCEED_SIZE_LIMIT'){
            icModale(0,'总文件大小已到最大限额');
        }else if(code=='Q_TYPE_DENIED'){
            icModale(0,'文件类型错误');
        }else if(code=='F_EXCEED_SIZE'){
            icModale(0,'文件过大，最大可传'+$fileSingleSizeLimit+'M');
        }else{
            icModale(0,'添加文件失败');
        }
    });
    //图片裁切
    function imageCropper() {
        $image = $("#previewImg>img");
        var _aspectRatio = params.aspectRatio;
        var cropperOptions = {
            aspectRatio: _aspectRatio,
            //preview: ".img-preview",//预览区元素
            //初始化时鼠标的状态设置成拖动图片状态，非剪切状态
            //dragMode:'move',
            //是否允许移动剪裁框
            movable:true,
            //是否允许改变裁剪框大小
            //cropBoxResizable:false,
            //是否允许放大缩小图片
            zoomable:true,
            //是否允许通过鼠标滚轮来缩放图片
            //mouseWheelZoom:false,
            //是否允许通过触摸移动来缩放图片
            //touchDragZoom:false,
            done: function (data) {
                // 输出结果
            }
        };

        $($image).cropper(cropperOptions);
        //返回重新选择上传图片
        $("#resetImg").click(function () {
            uploader.reset();
            $("#cut-handle-box,#preview-box,#resetSelect").addClass("hide");
            $("#uploader").removeClass("hide");
            $("#previewImg").html("");
            //销毁剪切框
            $image.cropper("destroy");
        });
        //拖动图片
        $("#dragMode").click(function () {
            $image.cropper("setDragMode",'move');
        });
        //拖动图片
        $("#dragCrop").click(function () {
            $image.cropper("setDragMode",'crop');
        });
        //放大
        $("#zoomIn").click(function () {
            $image.cropper("zoom", 0.1);
        });
        //缩小
        $("#zoomOut").click(function () {
            $image.cropper("zoom", -0.1);
        });
        //旋转左
        $("#rotateLeft").click(function () {
            $image.cropper("rotate", 90);
        });
        //旋转右
        $("#rotateRight").click(function () {
            $image.cropper("rotate", -90);
        });
        //重置
        $("#Reset").click(function () {
            $image.cropper("reset");
        });
    }
});
//上传按钮的操作状态
var uploadStatus = true;
/***
 * 执行上传
 */
function uploadFile(windIndex) {
    _windIndex = windIndex;
    if(uploader == null || uploader.getFiles('inited')==null || uploader.getFiles('inited').length > (typeof params.fileNumLimit !='undefined' ? params.fileNumLimit:1)){
        icModale(0,'文件错误，上传失败');
        return;
    }
    if(uploadStatus){
        if(params.cut==true && params.fileType == 'img'){//设置剪切数据
            //获取图片数据
            var imageData = $image.cropper("getImageData");
            //得到当前图片的高宽（不是原图的高宽）
            var imgWidth=imageData.width,imgHeight=imageData.height;

            var data = $image.cropper("getData");
            var x = data.x,y = data.y;
            //获取旋转角度
            var rotate = data.rotate;
            //当前显示图片的区域
            var canvasData = $image.cropper("getCanvasData");

            //剪切区域
            var cropBoxData = $image.cropper("getCropBoxData");

            //判断剪切框不能超出图片内容
            var _w = imgWidth+canvasData.left,_h = imgHeight+canvasData.top;
            var cropBoxWidth = cropBoxData.width,cropBoxHeight = cropBoxData.height;
            var w1 = cropBoxData.left + cropBoxWidth, h1 = cropBoxData.top+cropBoxHeight;
            if(x<0 || y<0 || w1>_w || h1>_h){
                icModale(0,'图片剪切框不能超出图片内容');
                return;
            }

            if(params.imgSize==null || typeof params.imgSize =='undefined'
                ||((params.imgSize.pc==null || typeof params.imgSize.pc =='undefined')
                    && (params.imgSize.mobile==null || typeof params.imgSize.mobile =='undefined')
                )){
                icModale(0,'未设置剪切图片参数');
                return;
            }
            var fileParams = {
                "fileName":_file.fileName,
                "fileType":params.fileType,
                "rotate":rotate,
                "newImageWidth":data.width,
                "newImageHeight":data.height,
                "x":x,
                "y":y,
                "pc":{
                    "imgSize":params.imgSize.pc
                },
                "mobile":{
                    "imgSize":params.imgSize.mobile
                }

            };
            uploader.options.formData = {
                "fileParams":JSON.stringify(fileParams)
            }
        }
        //开始上传
        uploader.upload();
        uploadStatus = false;
    }
}
